/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.entity;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import static javax.persistence.TemporalType.*;

/**
 * Clase que implementa una promoción para muebles los Alpes.
 * @author jsanchez
 */
@Entity
@Table(name="promocion2x1")
public class Promocion2X1 implements Serializable, Cloneable{

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_PROMOCION2X1")
    @SequenceGenerator(name = "SEQ_PROMOCION2X1", allocationSize = 1, sequenceName = "promocion2x1_seq")
    private Long idPromocion2X1;

    @OneToOne
    private Mueble mueble;
    @Temporal(DATE)
    private Date fechaInicio;
    @Temporal(DATE)
    private Date fechaFin;

    /**
     *
     */
    public Promocion2X1() {
    }

    /**
     *
     * @param mueble
     * @param fechaInicio
     * @param fechaFin
     */
    public Promocion2X1(Mueble mueble, Date fechaInicio, Date fechaFin) {
        this.mueble = mueble;
        this.fechaInicio = fechaInicio;
        this.fechaFin = fechaFin;
    }

    /**
     * Get the value of fechaFin
     *
     * @return the value of fechaFin
     */
    public Date getFechaFin() {
        return fechaFin;
    }

    /**
     * Set the value of fechaFin
     *
     * @param fechaFin new value of fechaFin
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * Get the value of fechaInicio
     *
     * @return the value of fechaInicio
     */
    public Date getFechaInicio() {
        return fechaInicio;
    }

    /**
     * Set the value of fechaInicio
     *
     * @param fechaInicio new value of fechaInicio
     */
    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }


    /**
     * Get the value of mueble
     *
     * @return the value of mueble
     */
    public Mueble getMueble() {
        return mueble;
    }

    /**
     * Set the value of mueble
     *
     * @param mueble new value of mueble
     */
    public void setMueble(Mueble mueble) {
        this.mueble = mueble;
    }

    /**
     * Obtiene le ID
     * @return Long
     */
    public Long getIdPromocion2X1() {
        return idPromocion2X1;
    }

    /**
     * Coloca el ID de la promocion
     * @param idPromocion2X1
     */
    public void setIdPromocion2X1(Long idPromocion2X1) {
        this.idPromocion2X1 = idPromocion2X1;
    }
    @Override
    public Object clone() throws CloneNotSupportedException {
        Promocion2X1 p = new Promocion2X1();
        p.setFechaFin(this.getFechaFin());
        p.setFechaInicio(this.getFechaInicio());
        p.setIdPromocion2X1(this.getIdPromocion2X1());
        p.setMueble(this.getMueble());
        return p;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj != null && obj instanceof Promocion2X1 &&
                this.getIdPromocion2X1() != null &&
                ((Promocion2X1)obj).getIdPromocion2X1() != null)
            return this.getIdPromocion2X1().equals(((Promocion2X1)obj).getIdPromocion2X1());
        return false;
    }

    @Override
    public int hashCode() {
        if(this.getIdPromocion2X1() == null)
            return 0;
        return this.getIdPromocion2X1().hashCode();
    }
}